package com.example.ad.sdk.domain.repositories.interceptor

import com.example.ad.sdk.domain.repositories.ParamsHelper
import okhttp3.Interceptor
import okhttp3.Response

/**
 * CommonParamsInterceptor 是一个拦截器类，用于在请求发送前添加公共参数。
 * 该类实现了 Interceptor 接口，并重写了 intercept 方法。
 */
class CommonParamsInterceptor : Interceptor {

    /**
     * 拦截请求并添加公共参数。
     *
     * @param chain 拦截器链，用于继续处理请求。
     * @return 处理后的响应对象。
     */
    override fun intercept(chain: Interceptor.Chain): Response {
        val originalRequest = chain.request()
        val originalHttpUrl = originalRequest.url

        // 判断请求方法是否为 GET
        if (originalRequest.method.equals("GET", ignoreCase = true)) {
            // 添加公共参数
            val newBuilder = originalHttpUrl.newBuilder()
            val commonParams = ParamsHelper.Companion.to.apiCommonParams(null)
            // 如果公共参数不为空，则将其添加到请求的 URL 中
            if (commonParams.isNotEmpty()) {
                for (entry in commonParams.entries) {
                    val value = entry.value
                    if (value is String) {
                        newBuilder.addQueryParameter(entry.key, value)
                    } else {
                        newBuilder.addQueryParameter(entry.key, value?.toString())
                    }
                }
            }

            // 构建新的请求对象并继续处理
            val newRequest = originalRequest.newBuilder()
                .url(newBuilder.build())
                .build()
            return chain.proceed(newRequest)
        }

        // 如果请求方法不是 GET，则直接继续处理原始请求
        return chain.proceed(originalRequest)
    }
}
